﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WaterRegimenMonitor.Common;
using System.Text;
using WaterRegimenMonitor.Web.DataModel;

namespace WaterRegimenMonitor.Web.Domain
{
    /// <summary>
    /// 菜单辅助类
    /// </summary>
    public static class MenuHelper
    {
        /// <summary>
        /// 获得指定角色的菜单列表。
        /// </summary>
        /// <param name="targetRoleList">角色列表。</param>
        /// <returns></returns>
        public static List<MenuInfo> GetMenuListByRole(List<Role> targetRoleList)
        {
            using (TalimuEntities context = new TalimuEntities())
            {
                //创建查询
                var query = from menu in context.Menu
                            join menuCategory in context.CategoryMenu on menu.MenuID equals menuCategory.MenuID
                            join category in context.Category on menuCategory.CategoryID equals category.CategoryID
                            orderby category.TheOrder, menuCategory.TheOrder
                            select new MenuInfo
                            {
                                Menu = menu,
                                Category = category,
                            };

                //返回结果
                return query.ToList();
            }
        }

        /// <summary>
        /// 渲染菜单模型。
        /// </summary>
        /// <returns>渲染出来的菜单模型。</returns>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/08 17:03    创建
        /// </history>
        public static List<string> BuildRenderModel()
        {
            //获得所有的菜单列表
            List<MenuInfo> menus = Helper.CurrentPrincipal.MenuList;

            //用于保存菜单模型信息
            List<string> menuModels = new List<string>();

            //用于保存菜单的脚本
            StringBuilder builder = new StringBuilder();

            //用于记录是否为第一行
            bool isFirstRow = true;

            //用于保存标题
            string title = string.Empty;

            //用于记录前一个菜单
            MenuInfo prevMenu = null;

            //判断是否有菜单
            if (menus != null && menus.Count > 0)
            {
                //记录分类
                prevMenu = menus[0];

                //循环添加
                foreach (MenuInfo info in menus)
                {
                    //判断是否为第一行
                    if (isFirstRow)
                    {
                        //添加开始标记
                        builder.Append("<ul class=\"Menu\">");
                    }

                    //判断是否为最后一行
                    if (prevMenu.Category.CategoryID != info.Category.CategoryID)
                    {
                        //添加结束标记
                        builder.Append("</ul>");

                        //生成标题
                        title = string.Format("<span class=\"{0}\">{1}</span>", string.IsNullOrEmpty(prevMenu.Category.Style) ? "MenuTitle" : prevMenu.Category.Style, prevMenu.Category.CategoryName);

                        //添加到列表
                        menuModels.Add(string.Format(@"{{ Title: '{0}', Html: '{1}', ID:'{2:B}'}}", title, builder.ToString(), prevMenu.Category.CategoryID));

                        //清除内容
                        builder.Clear();

                        //添加开始标记
                        builder.Append("<ul class=\"Menu\">");
                    }

                    //判定是否设置了菜单样式
                    if (!string.IsNullOrEmpty(info.Menu.Style))
                    {
                        //添加菜单
                        builder.AppendFormat("<li><a class=\"{0}\" href=\"{1}\">{2}</a></li>", info.Menu.Style, info.Menu.SourceUrl, info.Menu.MenuName);
                    }
                    else
                    {
                        //添加菜单
                        builder.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", info.Menu.SourceUrl, info.Menu.MenuName);
                    }

                    //记录分类编号
                    prevMenu = info;
                }

                //添加结束标记
                builder.Append("</ul>");

                //生成标题
                title = string.Format("<span class=\"{0}\">{1}</span>", string.IsNullOrEmpty(prevMenu.Category.Style) ? "MenuTitle" : prevMenu.Category.Style, prevMenu.Category.CategoryName);

                //添加到列表
                menuModels.Add(string.Format(@"{{ Title: '{0}', Html: '{1}', ID:'{2:B}'}}", title, builder.ToString(), prevMenu.Category.CategoryID));

                //清除内容
                builder.Clear();
            }

            //返回模型
            return menuModels;
        }
    }
}